#!/bin/bash     
# shell脚本必须以#!/bin/bash 开头

# 脚本有两种执行方式
# 1.给文件添加可执行权限，直接 ./文件名.sh 执行
# 2.直接用 sh 脚本文件名 命令执行，不用赋予脚本可执行权限

# 定义变量(shell中所有变量都默认是全局变量)
# 变量名一般习惯大写，可以由字母、数字和下划线组成，但是不能以数字开头
A=100
echo $A
echo "A=$A"  #echo执行后自动输出换行
#如果在输出时候变量后面还有输出需要用{}括起来，用来明确变量边界
#如：echo "A=${A}BCDEF"

# 销毁变量
unset A
echo "A=$A"  # A=

# 声明静态变量，不能被unset销毁(也是全局变量)
readonly B=666
echo B=$B
unset B    #执行话会报错

# 变量定义规则
# 变量称可以由字母、数字和下划线组成，但是不能以数字开头，一般习惯大写
# 等号两侧不能有空格

# 将指令的执行结果赋值给变量
C=`date`      
echo "C=$C"
# 也可以这样
D=$(date)         # ``和$()都可以获取指令的执行结果,但这个易读性更强
echo "D=$D"
echo 'D=$D'
:<<!  
(多行注释语法，注释内容不能与注释同一行，不然语法报错)
在shell中反引号和$()用来获取并捕获一个命令或程序的输出结果
单引号('')会被视为纯粹的文本
双引号("")会解释一些指令，如变量引用、命令替换等
!

#输出配置好的环境变量信息(在/etc/profile中设置的)
echo "Java_home=$JAVA_HOME"  


#输出命令行参数，类似c++中agrc[]
echo "第一个参数=$0 第二个=$1 第三个=$2" #$0是脚本文件名,超过10要 ${10} 这样写
echo "脚本文件名=$0"
echo "命令行所有参数=$*"  #$* 将参数都视为一个整体全部显示
echo "$@"                 #将所有参数分别显示的，不视为整体
echo "参数个数=$#" 

#输出预定义变量(shell脚本自带的变量)
echo "当前进程号=$$"
:<<!
$$：当前进程的进程号。
$!：后台运行的最后一个进程的进程号。
$?：最后一次执行的命令的返回状态。如果这个变量的值为 0，证明上一个命令正确执行；
如果这个变量的值为非0(具体是哪个数，由命令自己来决定但一般是1)，则证明上一个命令执行不正确
!

#计算表达式的值(加减乘法取余)
#只能进行整数运算，但计算结果是浮点数会自动向下取整
#整数变量的范围一般是-2^31~2^31-1(long long)
#第一种
RES1=$((3*(6/4)+1))   
echo "RES1=$RES1"  # 结果为4
#第二种(推荐)
RES2=$[5+6*(5%2)] #在$[]和$(())进行算数计算时候，可以直接使用变量，不需要加$
echo "RES2=$RES2"
#第三中(了解即可)
RES3=`expr 1 + 1 \* 6`  # 反引号``不可省
#expr中运算符左右两边数字必须有空格
#在expr中"\*"是乘号，其他运算符正常
echo "RES3=$RES3"
